/*
 * Dynamics.cpp
 *
 *  Created on: Jun 16, 2010
 *      Author: bernardo
 */
#ifndef DYNAMICS_H_
#define DYNAMICS_H_
#include <iostream>
#include <tr1/memory>
#include <vector>
#include "StageParam.hpp"
#include "ProbDensStat.hpp"
#include "BandedSystem.hpp"

class Dynamics {
public:
	static const int nVStates = 2;
	bool crNicParametersChanged;
	typedef ProbDensStat<nVStates> ProbDensityType;
	ProbDensityType density;
	void setStages(size_t nStages,size_t nPhiStage);
	void setStageParams(std::vector<StageParam>& stageParms);
	void setTime(double time) {this->time=time;}
	void setdT(double dT) {this->dT=dT;}
	inline double getTime() const { return time; }
	inline size_t getNStages() const {return stageParams.size();}
	double oneStepUpWind(double alpha0);
	double oneStepCrNic(double alpha0);
  explicit Dynamics();
private:
	double time, dT;
	std::vector<StageParam> stageParams;
	std::vector<std::tr1::shared_ptr<BandedSystem> > bandedSystems;
};


#endif //DYNAMICS_H
